﻿// Copyright (c) Appeon. All rights reserved.
// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. 
// You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.

using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;

namespace SnapObjects.Data
{
    internal static class AdoDbResultSetExtensions
    {
        public static async Task<IList<TModel>> ToListAsync<TModel>(
            this IAdoDbResultSet<TModel> resultSet,
            CancellationToken cancellationToken)
        {
            var list = new List<TModel>();

            try
            {
                while (await resultSet.MoveNextAsync(cancellationToken))
                {
                    list.Add(((AdoDbResultSet<TModel>)resultSet).Current);
                }
            }
            finally
            {
                await resultSet.DisposeAsync();    
            }
            
            return list;
        }
    }
}
